/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modulo1;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
import java.text.SimpleDateFormat;
import Modelo.*;
import Acceso.FormatUtility;

/**
 *
 * @author miguel474
 */
public class agregarPreReporteAction extends org.apache.struts.action.Action {

    private static final String SUCCESS = "success";
    private static final String FAILURE = "failure";

    boolean validarCedula(ActionErrors errors, String cadena, String err, HttpServletRequest request, Pattern p) {
        Matcher m;
        m = p.matcher(cadena);
        if (!m.matches()) {
            errors.add(err, new ActionMessage("errors." + err));
            saveErrors(request, errors);
            return true;
        }
        return false;
    }

    boolean validarCaracteres(ActionErrors errors, String cadena, String err, HttpServletRequest request, Pattern p) {

        Matcher m;
        m = p.matcher(cadena);

        if (m.find()) {
            errors.add(err, new ActionMessage("errors." + err));
            saveErrors(request, errors);
            return true;
        }
        return false;
    }

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        agregarPreReporteForm formBean = (agregarPreReporteForm) form;
        ActionErrors errors = new ActionErrors();
        String ingresa = formBean.getIngresa();
        String descripcion = formBean.getDescripcion();
        String sede = formBean.getSede();
        String ubicacion = formBean.getUbicacion();
        String fecha_suceso = formBean.getFecha_suceso();
        String nombre = formBean.getNombre_denunciante();
        String apellido = formBean.getApellido_denunciante();
        String nacCedula = formBean.getNac_ci_denunciante();
        String numCedula = formBean.getNum_ci_denunciante();
        String cedula = nacCedula + "-" + numCedula;
        String telefono = formBean.getTelefono();
        String hora_suceso = formBean.getHora_suceso();
        String min_suceso = formBean.getMinutos_suceso();
        String mer_suceso = formBean.getMeridiano();
        String tiempo_suceso = fecha_suceso + " " + hora_suceso + ":" + min_suceso + " " + mer_suceso;
        int tlf = new Integer(0);
        boolean existe_error = false;
        Pattern p;

        // validamos el nombre
        if (nombre == null || nombre.length() < 1) {
            errors.add("falta_Nombre", new ActionMessage("errors.falta_Nombre"));
            saveErrors(request, errors);
            existe_error = true;
        } else if (nombre.length() < 2) {
            errors.add("long_Nombre", new ActionMessage("errors.long_Nombre"));
            saveErrors(request, errors);
            existe_error = true;
        } else if (!FormatUtility.validatePattern(nombre, 3)) {
            errors.add("invalid_caracter_N1", new ActionMessage("errors.invalid_caracter_N1"));
            saveErrors(request, errors);
            existe_error = true;
        }
        // validamos el apellido
        if (apellido == null || apellido.length() < 1) {
            errors.add("falta_Apellido", new ActionMessage("errors.falta_Apellido"));
            saveErrors(request, errors);
            existe_error = true;
        } else if (apellido.length() < 2) {
            errors.add("long_Apellido", new ActionMessage("errors.long_Apellido"));
            saveErrors(request, errors);
            existe_error = true;
        } else if (!FormatUtility.validatePattern(apellido, 3)) {
            errors.add("invalid_caracter_A1", new ActionMessage("errors.invalid_caracter_A1"));
            saveErrors(request, errors);
            existe_error = true;
        }

        if ((descripcion == null) || (descripcion.equals(""))) {
            errors.add("pr_faltaDescripcion", new ActionMessage("errors.pr_faltaDescripcion"));
            saveErrors(request, errors);
            existe_error = true;
        }

        // Validamos de cedula
        if (numCedula == null || numCedula.length() < 1) {
            errors.add("falta_Cedula", new ActionMessage("errors.falta_Cedula"));
            System.out.println("CEDULA REQUERIDA");
            saveErrors(request, errors);
            existe_error = true;
        } else if (!FormatUtility.validatePattern(numCedula, 2)) {
            errors.add("invalid_Cedula", new ActionMessage("errors.invalid_Cedula"));
            System.out.println("CEDULA INVALIDA");
            saveErrors(request, errors);
            existe_error = true;
        } else {
            System.out.println("CEDULA VALIDA");
        }

        // Valido que el Telefono
        if ((telefono == null) || (telefono.equals(""))) {
            errors.add("pr_faltaTelefono", new ActionMessage("errors.pr_faltaTelefono"));
            saveErrors(request, errors);
            existe_error = true;
        }
        if (telefono != null && !telefono.equals("")) {
            if (!FormatUtility.validatePattern(telefono, 2)) {
                errors.add("telefono_letras", new ActionMessage("errors.telefono_letras"));
                saveErrors(request, errors);
                existe_error = true;
            } else {
                tlf = Integer.parseInt(telefono.trim().replaceAll(" ", ""));
            }
        }

        if (ingresa.equals("seleccionar")) {
            errors.add("pr_faltaIngresa", new ActionMessage("errors.pr_faltaIngresa"));
            saveErrors(request, errors);
            existe_error = true;
        }

        if (sede.equals("seleccionar")) {
            errors.add("pr_faltaSede", new ActionMessage("errors.pr_faltaSede"));
            saveErrors(request, errors);
            existe_error = true;
        }

        if (ubicacion.equals("seleccionar")) {
            errors.add("pr_faltaUbicacion", new ActionMessage("errors.pr_faltaUbicacion"));
            saveErrors(request, errors);
            existe_error = true;
        }



        if ((descripcion == null) || (descripcion.equals(""))) {
            errors.add("pr_faltaDescripcion", new ActionMessage("errors.pr_faltaDescripcion"));
            saveErrors(request, errors);
            existe_error = true;
        }

        if ((fecha_suceso == null) || (fecha_suceso.equals(""))) {
            errors.add("pr_faltaFecha", new ActionMessage("errors.pr_faltaFecha"));
            saveErrors(request, errors);
            existe_error = true;
        }



        // Revisa los formatos de las cédulas

        p = Pattern.compile("[0-9]*");
        existe_error = (validarCedula(errors, numCedula, "pr_cedulaNumeros", request, p) || existe_error);

        // Teléfono
        p = Pattern.compile("[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]");
        existe_error = (validarCedula(errors, telefono, "pr_telfNumeros", request, p) || existe_error);

        // Fecha
        //p = Pattern.compile("[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]");
        //existe_error = (validarCaracteres(errors, fecha_suceso, "pr_formatFecha", request, p) || existe_error);

        p = Pattern.compile("[^a-zA-Záéíóú ]+");
        existe_error = (validarCaracteres(errors, nombre, "pr_nombreLetras", request, p) || existe_error);
        existe_error = (validarCaracteres(errors, apellido, "pr_apellidoLetras", request, p) || existe_error);

        if (existe_error) {
            return mapping.findForward(FAILURE);
        }

        PreReporte pr = new PreReporte();
        pr.setIngresa(ingresa);
        pr.setUbicacion(ubicacion);
        pr.setDescripcion(descripcion);
        pr.setNombreSede(sede);
        SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yy hh:mm a");
        Calendar cal = Calendar.getInstance();
        pr.setFechaPr(formato.parse(formato.format(cal.getTime())));
        pr.setFechaSuceso(formato.parse(tiempo_suceso));

        ComunidadUniversitaria denunciante = new ComunidadUniversitaria();
        denunciante.setCi(cedula);
        denunciante.setNombre1(nombre);
        denunciante.setApellido1(apellido);
        denunciante.setTelefono(tlf);

        if (Modelo.DAL.ComunidadUniversitaria_DAO.checkExistence(cedula)) {
            errors.add("pr_cedulaExiste", new ActionMessage("errors.pr_cedulaExiste"));
            saveErrors(request, errors);
            return mapping.findForward(FAILURE);
        }

        if (Modelo.DAL.PreReporte_DAO.insertarPreReporte(pr)) {
            System.out.println("... aqui entro ...");
            Modelo.DAL.ComunidadUniversitaria_DAO.insertarComunidadUniversitaria(denunciante);
            Modelo.DAL.Denuncia_DAO.insertarDenuncia(cedula);
            return mapping.findForward(SUCCESS);
        } else {
            return mapping.findForward(FAILURE);
        }
    }
}
